package br.com.eduquiz.session;

import br.com.eduquiz.entity.*;
import br.com.eduquiz.util.Tools;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.security.Restrict;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.framework.EntityHome;
import org.jboss.seam.international.StatusMessage.Severity;

@Name("administradorGrupoHome")
public class AdministradorGrupoHome extends EntityHome<AdministradorGrupo> {

	private static final long serialVersionUID = -1272679990789786210L;

	@In
	private FacesMessages facesMessages;
	
	@Override
	@Restrict("#{s:hasRole('AdministradorGeral')}")
	public String persist() {
		String senha = getInstance().getSenha();
		String confirmarSenha = getInstance().getConfirmarSenha();
		
		if (senha.equals(confirmarSenha)) {
			senha = Tools.encriptar(senha);
			
			getInstance().setSenha(senha);
			getInstance().setDataCadastro(Calendar.getInstance());
			
			return super.persist();
		} else {
			facesMessages.addFromResourceBundle(Severity.ERROR, "utils_Senhas_diferentes");
			return "failed";
		}
	}

	@Override
	@Restrict("#{s:hasRole('AdministradorGeral') or permissao.administradorGrupoSessao}")
	public String update() {
		String senha = getInstance().getSenha();
		String confirmarSenha = getInstance().getConfirmarSenha();
		
		if (!confirmarSenha.equals("") && !confirmarSenha.equals(null)) {
		
			if (senha.equals(confirmarSenha)) {
				getInstance().setSenha(Tools.encriptar(senha));
				return super.update();
			}
		}
		
		facesMessages.addFromResourceBundle(Severity.ERROR, "utils_Senhas_diferentes");
		return "failed";
	}
	
	@Override
	@Restrict("#{s:hasRole('AdministradorGeral') or permissao.administradorGrupoSessao}")
	public String remove() {
		return super.remove();
	}
	
	public void setAdministradorGrupoId(Long id) {
		setId(id);
	}

	public Long getAdministradorGrupoId() {
		return (Long) getId();
	}

	@Override
	protected AdministradorGrupo createInstance() {
		AdministradorGrupo administradorGrupo = new AdministradorGrupo();
		return administradorGrupo;
	}

	public void load() {
		if (isIdDefined()) {
			wire();
		}
	}

	public void wire() {
		getInstance();
	}

	public boolean isWired() {
		return true;
	}

	public AdministradorGrupo getDefinedInstance() {
		return isIdDefined() ? getInstance() : null;
	}

	public List<Telefone> getTelefone() {
		return getInstance().getTelefone() == null ? null : new ArrayList<Telefone>(
				getInstance().getTelefone());
	}
	
	public List<Grupo> getGrupo() {
		return getInstance().getGrupo() == null ? null : new ArrayList<Grupo>(
				getInstance().getGrupo());
	}

}
